package object;

/**
 * 方法重载
 */
public class MethodOverLoad {

    public static void main(String[] args) {

        /*
            java中允许同一个类中，多个同名方法的存在，但要求 形参列表不一致
            重载减轻了起名和记名的麻烦
            如：1) calculate(int n1, int n2) //两个整数的和
                2) calculate(int n1, double n2) //一个整数，一个 double 的和
                3) calculate(double n2, int n1)//一个 double ,一个 Int 和
                4) calculate(int n1, int n2,int n3)//三个 int 的和
         */
        MyCalculator myCalculator = new MyCalculator();
        System.out.println(myCalculator.calculate(1, 2));
        System.out.println(myCalculator.calculate(1.0, 2));
        System.out.println(myCalculator.calculate(1, 2.0));

        /*
            方法重载注意事项
            1) 方法名：必须相同
            2) 形参列表：必须不同(形参类型或个数或顺序)
            3) 返回类型：无要求
         */

    }
}
class MyCalculator {

    public int calculate(int n1, int n2) {
        System.out.println("calculate(int n1, int n2) 被调用");
        return n1 + n2;
    }

    //如下没有构成重载，只改变返回值不是重载
//    public void calculate(int n1 , int n2) {
//
//    }

    public double calculate(int n1, double n2) {
        System.out.println("calculate(int n1, double n2) 被调用");
        return n1 + n2;
    }

    public double calculate(double n1, int n2) {
        System.out.println("calculate(double n1, int n2) 被调用");
        return n1 + n2;
    }

    public int calculate(int n1, int n2, int n3) {
        System.out.println("calculate(int n1, int n2, int n3) 被调用");
        return n1 + n2 + n3;
    }
}